using UnityEngine;
using System.Collections;

/// <summary>
/// DDOL singleton.
/// 一个继承自MonoBehaviour的单例类
/// 约束 T 为 DDOLSingleton<T>类型的组件，因为它要挂在对象身上
/// abstract：抽象类不能实例化。为了子类继承，并实现基类里并未实现的抽象方法
/// </summary>
public abstract class DDOLSingleton<T> : MonoBehaviour where T : DDOLSingleton<T>
{
	protected static T _Instance = null;
	
	public static T Instance
	{
		get{
			if (null == _Instance)
			{
				GameObject go = GameObject.Find("DDOLGameObject");
				if (null == go)//判断是否存在，避免加载一次场景多一个对象
				{
					go = new GameObject("DDOLGameObject");
					DontDestroyOnLoad(go);     //转换场景时不销毁该对象
				}
				_Instance = go.AddComponent<T>();

			}
			return _Instance;
		}
	}

	/// <summary>
	/// 在程序退出的时候销毁该组件
	/// </summary>
	private void OnApplicationQuit ()
	{
		_Instance = null;
	}
}

